open Ast

type struct_or_union =
	| Struct
	| Union

exception Variable_non_trouvee of string * loc
exception Erreur_de_typage of string * loc
exception Main_inexistant
exception Return_mal_type

(*	L'environnement des structures. dans l'ordre :
		Le string definit le nom de la structure
		Puis on a :
			struct_or_union pour savoir si c'est une struct ou une union
			La liste des variables de la structure avec leur nom et leur type
*)
val env_struct : (string, (struct_or_union * (string * c_type) list * string)) Hashtbl.t

(* L'environnement des variable globale :
	Le string defini le nom et le c_type le type de cette variable
*)
val env_global : ((string, c_type * string) Hashtbl.t)

val env_fun : (string, (c_type * c_type list * string)) Hashtbl.t

val typer_fichier : Ast.loc Ast.file -> Ast.c_type Ast.file

val env_retour_fun : (string, c_type) Hashtbl.t

